package com.ljy.my_study.leetcode.三个数的最大乘积;

import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;

/**
 * @author lijunying
 * @date 2021/1/20 10:45
 */
public class TestMain {

//    给定一个整型数组，在数组中找出由三个数组成的最大乘积，并输出这个乘积。
//
//    示例 1:
//
//    输入: [1,2,3]
//    输出: 6
//    示例 2:
//
//    输入: [1,2,3,4]
//    输出: 24
//    注意:
//
//    给定的整型数组长度范围是[3,104]，数组中所有的元素范围是[-1000, 1000]。
//    输入的数组中任意三个数的乘积不会超出32位有符号整数的范围。
//
//    来源：力扣（LeetCode）
//    链接：https://leetcode-cn.com/problems/maximum-product-of-three-numbers
//    著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。

    public static void main(String[] args) {
        TestMain testMain=new TestMain();
//        System.out.println(testMain.maximumProduct(new int[]{-1,-2,3,4}));
//        System.out.println(testMain.maximumProduct(new int[]{1,2,3,4}));
//        System.out.println(testMain.maximumProduct(new int[]{-11,-2,3,4}));
//        System.out.println(testMain.maximumProduct(new int[]{-11,-3,0,4}));
//        System.out.println(testMain.maximumProduct(new int[]{-100,-2,-3,1}));
        System.out.println(testMain.maximumProduct(new int[]{3,4,0,0,-1,-5}));
    }

    public int maximumProduct(int[] nums) {
        int len=nums.length;
        int[] copy=new int[len];
        System.arraycopy(nums,0,copy,0,len);
        Arrays.sort(copy);
        int firstPositive=-1;
        for(int i=0;i<len;i++){
            if(copy[i]>0){
                firstPositive=i;
                break;
            }
        }
        if(firstPositive==-1||firstPositive==0){
            return copy[len-1]*copy[len-2]*copy[len-3];
        }else{
            return Math.max(copy[0]*copy[1]*copy[len-1],copy[len-1]*copy[len-2]*copy[len-3]);
        }
    }
}
